//弹出提示
const msg = (title, icon = 'none', mask = false, duration = 2200) => {
	//统一提示方便全局修改
	if (Boolean(title) === false) {
		return;
	}
	uni.showToast({
		title,
		duration,
		mask,
		icon,
		position: 'bottom'
	});
	setTimeout(() => {
		uni.hideToast();
	}, duration);
}

//上一页面对象
const prePage = () => {
	let pages = getCurrentPages();
	let prePage = pages[pages.length - 2];
	// #ifdef H5
	return prePage;
	// #endif
	return prePage.$vm;
}
//时间戳转日期
//时间戳为10位需*1000，时间戳为13位的话不需乘1000
// 一种 返回年月日时分秒
function fomateDate(num) {
	let date = new Date(num * 1000);
	var Y = date.getFullYear() + '-';
	var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
	var D = date.getDate() + ' ';
	var h = date.getHours() + ':';
	var m = date.getMinutes() + ':';
	var s = date.getSeconds();
	return Y + M + D + h + m + s;
}
// 二种 返回年月日
function fomateYMD(num) {
	let date = new Date(num * 1000);
	var Y = date.getFullYear() + '-';
	var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
	var D = date.getDate() + ' ';
	if (date.getDate() < 10) {
		D = '0' + date.getDate()
	} else {
		D = date.getDate()
	}
	return Y + M + D;
}

//获取当前日期
function getNowDate() {
	let date = new Date();
	var Y = date.getFullYear() + '-';
	var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
	var D = date.getDate() + ' ';
	if (date.getDate() < 10) {
		D = '0' + date.getDate()
	} else {
		D = date.getDate()
	}
	return Y + M + D;
}

//获取当前页面对象
function currentPage() {
	var pages = getCurrentPages();
	var page = pages[pages.length - 1];
	// #ifdef H5
	return page;
	// #endif
	return page.$vm;
}

//上传文件
function uploadFile(url, file, name, data, success, complete, isLoad = false, title = '正在上传') {
	if (isLoad) {
		uni.showLoading({
			title: title,
			mask: true
		});
	}
	const jwt = uni.getStorageSync('jwt');
	uni.uploadFile({
		url: getApp().globalData.global_url + url,
		filePath: file,
		name: name,
		formData: data,
		header: {
			authorization: jwt,
		},
		timeout: 3600000,
		// fileType:image/video/audio
		success: function(res) {
			if (res && res.statusCode == 200) {
				success(res.data);
			} else {
				var json = {
					code: -999,
					msg: '基础网络连接错误！'
				};
				success(json);
			}
		},
		fail: function() {
			msg('请检查网络连接！');
		},
		complete: function() {
			if (isLoad) {
				uni.hideLoading();
			}
			if (complete) {
				complete();
			}
		}
	});
}

function numberFormat(num) {
	if (!num) {
		return 0;
	}
	if (num >= 1000000000000) {
		const moneys = num / 1000000000000
		const realVal = moneys.toFixed(2);
		return realVal + "万亿"

	} else if (num >= 100000000) {
		const moneys = num / 100000000
		const realVal = moneys.toFixed(2);
		return realVal + "亿"
	} else if (num >= 10000) {
		const moneys = num / 10000
		const realVal = moneys.toFixed(2);
		return realVal + "万"
	} else {
		return num.toFixed(0)
	}
}

// 跳转网页
function toWebView(url) {
	// console.log(url);
	if (url) {
		uni.navigateTo({
			url: '/pages/web_view/web_view?url=' + encodeURIComponent(url)
		})
	}
}
//跳转页面
function go(url) {
	if (url) {
		uni.navigateTo({
			url: url
		})
	}
}

// 复制
function copy(content) {
	/**
	 * 小程序端 和 app端的复制逻辑
	 */
	//#ifndef H5
	uni.setClipboardData({
		data: content,
		success: function() {
			msg("复制成功~");
		},
		fail: function() {
			msg("复制失败~");
		}
	});
	//#endif

	/**
	 * H5端的复制逻辑
	 */
	// #ifdef H5
	if (!document.queryCommandSupported('copy')) { //为了兼容有些浏览器 queryCommandSupported 的判断
		// 不支持
		error('浏览器不支持')
	}
	let textarea = document.createElement("textarea")
	textarea.value = content
	textarea.readOnly = "readOnly"
	document.body.appendChild(textarea)
	textarea.select() // 选择对象
	textarea.setSelectionRange(0, content.length) //核心
	let result = document.execCommand("copy") // 执行浏览器复制命令
	if (result) {
		msg("复制成功~")
	} else {
		msg("复制失败，请检查h5中调用该方法的方式，是不是用户点击的方式调用的，如果不是请改为用户点击的方式触发该方法，因为h5中安全性，不能js直接调用！")
	}
	textarea.remove()
	// #endif
}

function randomString(n) {
	let str = 'abcdefghijklmnopqrstuvwxyz9876543210';
	let tmp = '',
		i = 0,
		l = str.length;
	for (i = 0; i < n; i++) {
		tmp += str.charAt(Math.floor(Math.random() * l));
	}
	return tmp;
}





function hasSensitiveWord(text) {
	const sensitiveWords = ["美体", "敏感词", "敏感词1"]; // 敏感词数组
	for (let i = 0; i < sensitiveWords.length; i++) {
		const pattern = new RegExp(sensitiveWords[i], "gi"); // 生成匹配敏感词的正则表达式
		if (pattern.test(text)) {
			return sensitiveWords[i]; // 存在敏感词
		}
	}
	return false; // 不存在敏感词
}

function toFormateStr(ctx, str, draw_width, lineNum, startX, startY, steps) {
	// *  参数解析：
	// * 
	// * 	ctx:  canvas绘图上下文
	// * 	str:  需要绘制的文本内容
	// * 	draw_width:  绘制后的文字显示宽度
	// * 	lineNum:  最大行数，多出部分用'...'表示， 如果传-1可以达到自动换行效果
	// * 	startX:  绘制文字的起点 X 轴坐标
	// * 	startY:  绘制文字的起点 Y 轴坐标
	// *	steps:  文字行间距
	var strWidth = ctx.measureText(str).width; // 测量文本源尺寸信息（宽度）
	var startpoint = startY,
		keyStr = '',
		sreLN = strWidth / draw_width;
	var liner = Math.ceil(sreLN); // 计算文本源一共能生成多少行
	let strlen = parseInt(str.length / sreLN); // 等比缩放测量一行文本显示多少个字符

	// 若文本不足一行，则直接绘制，反之大于传入的最多行数（lineNum）以省略号（...）代替
	if (strWidth < draw_width) {
		ctx.fillText(str, startX, startpoint);


	} else {

		for (var i = 1; i < liner + 1; i++) {
			let startPoint = strlen * (i - 1);
			if (i < lineNum || lineNum == -1) {
				keyStr = str.substr(startPoint, strlen);
				ctx.fillText(keyStr, startX, startpoint);
			} else {
				keyStr = str.substr(startPoint, strlen);
				ctx.fillText(keyStr, startX, startpoint);
				break;
			}
			startpoint = startpoint + steps;
		}

	}
}

function getImageInfo(imgSrc) {
	return new Promise((resolve, reject) => {
		uni.downloadFile({
			url: imgSrc,
			success: function(res) {
				resolve(res);
			},
			fail: (err) => {
				reject(err);
			}
		})
	});
}
function calculateDistance(lat1,lon1,lat2,lon2) {
	
       const earthRadius = 6371; // 地球半径，单位：千米

    const toRadians = (value) => value * Math.PI / 180;

    const dLat = toRadians(lat2 - lat1);
    const dLon = toRadians(lon2 - lon1);

    const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
        Math.cos(toRadians(lat1)) * Math.cos(toRadians(lat2)) *
        Math.sin(dLon / 2) * Math.sin(dLon / 2);

    const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

    const distance = earthRadius * c;
	return lat2===0?undefined:distance.toFixed(2);

    // return distance.toFixed(2);
}
//防抖函数,需按需导入导出
export function debounce(func, wait, immediate) {
	let timeout //计时器
	return function(...args) { //args就是传的参数
		let context = this
		if (timeout) clearTimeout(timeout) //如果有计时器就清除计时器
		if (immediate) { //如果立即执行设置为true
			let callNow = !timeout //定时器为空就是true
			timeout = setTimeout(function() { //开启定时器
				timeout = null
			}, wait) //wait：定时器的时间
			if (callNow) func.apply(context, args) //定时器为空的话就执行把传进来的函数指向改变为这个防抖函数，然后把参数传给这个防抖函数。通过return把参数返回。
		} else {
			//立即执行为false就开个定时器在执行这个函数
			timeout = setTimeout(function() {
				func.apply(context, args)
			}, wait)
		}
	}
}


export default {
	msg: msg,
	prePage: prePage,
	fomateDate: fomateDate,
	fomateYMD: fomateYMD,
	getNowDate: getNowDate,
	currentPage: currentPage,
	uploadFile: uploadFile,
	toWebView: toWebView,
	numberFormat: numberFormat,
	copy: copy,
	randomString: randomString,
	go: go,
	hasSensitiveWord: hasSensitiveWord,
	toFormateStr: toFormateStr,
	getImageInfo: getImageInfo,
	calculateDistance:calculateDistance
}